
export default {
  subsList: {}, // 所有的订阅对象
  // 订阅
  subscribe: function (key, fn) {
    // 没有没有key给个初值避免调用报错
    if (!this.subsList[key]) {
      this.subsList[key] = [];
    }
    // 增加订阅者,一个key就是一种订阅类型
    this.subsList[key].push(fn);
  },
  // 发布
  notify (key, params) {
    const fns = this.subsList[key]
    // 确认有订阅函数
    if (!fns || fns.length === 0) {
      return false;
    }

    // 发布消息，触发同类型的所有订阅，
    fns.forEach((fn) => {
      fn(params);
    })
  },
  // 取消订阅, key必填，fn选填：不填删除所有key订阅，填了删除对应函数订阅
  unSubscribe: function (key, fn) {
    let fns = this.subsList[key]; //取出该类型的对应的消息集合
    if (!fns) { // 如果对应的key没有订阅直接返回
      return false;
    }
    if (!fn) { // 取消key的所有订阅
      delete this.subsList[key]
    } else { // 取消key的对应函数订阅
      let i = fns.findIndex(item => item === fn)
      if (i > -1) { // 确认函数存在
        fns.splice(i, 1); // 删除订阅者的回掉
      }
    }
  }
}